<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('variant_attributes', function (Blueprint $table) {
            // 基础字段
            $table->id()->comment('属性ID');
            $table->foreignId('product_id')->nullable()->constrained()->onDelete('cascade')->comment('关联产品ID（可选，用于全局规格属性）');
            $table->string('name')->comment('属性名称，如"颜色"、"存储容量"');
            $table->string('slug')->comment('属性别名，用于URL和代码标识，如"color"、"storage"');
            
            // 属性类型和配置
            $table->enum('type', ['select', 'color', 'size', 'text', 'number'])->default('select')->comment('属性类型：select=下拉选择，color=颜色选择，size=尺寸选择，text=文本输入，number=数字输入');
            $table->json('options')->nullable()->comment('属性选项，JSON数组格式，如["红色","蓝色","绿色"]');
            
            // 属性配置
            $table->boolean('is_required')->default(false)->comment('是否必选，true表示用户必须选择此属性');
            $table->boolean('is_variant')->default(true)->comment('是否影响变体，true表示此属性会影响产品变体');
            
            // 排序和元数据
            $table->integer('sort_order')->default(0)->comment('排序权重，数值越大排序越靠前');
            $table->json('meta_data')->nullable()->comment('扩展元数据，JSON格式，可存储颜色代码、尺寸规格等');
            
            // 时间戳
            $table->timestamps();
            
            // 索引优化
            $table->index(['product_id', 'is_variant'], 'idx_attr_product_variant')->comment('产品和变体影响组合索引，用于查询影响变体的属性');
            $table->index(['product_id', 'sort_order'], 'idx_attr_product_sort')->comment('产品和排序组合索引，用于属性排序');
            $table->index(['product_id', 'is_required'], 'idx_attr_product_required')->comment('产品和必选组合索引，用于查询必选属性');
            $table->index('slug', 'idx_attr_slug')->comment('属性别名索引，用于快速查找');
            $table->index('type', 'idx_attr_type')->comment('属性类型索引，用于按类型筛选');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('variant_attributes');
    }
};
